package com.itheima._01认识异常;

import java.io.FileInputStream;
import java.io.FileNotFoundException;

/**
 * @Description Demo012
 * @Author songyu
 * @Date 2025-07-16  16:40
 */
public class Demo012 {

    //目标：处理基本异常
    //方案1：捕获异常。自己处理，不告诉外部
    //      语法：  try{ 编译时异常的代码 }
    //             catch(异常类名 变量名){ 处理异常的代码(恢复程序) }
    //             catch(... ...){ 处理异常的代码(恢复程序) }
    //             catch(Exception 变量名){ 处理异常的代码(恢复程序) }
    //方案2：throws 抛出异常，自己不处理抛给外部去处理
    //      抛子类异常语法1：  throws 异常类型1,异常类型2...
    //      抛父类异常语法2：  throws Exception

    //使用方案1：自己处理异常，恢复程序（给出友好消息提示），不让程序终止
    public static void main(String[] args) {

        try {
            //文件输入流读取文件
            FileInputStream fileInputStream = new FileInputStream("a.txt");//这是一个相对路径读取文件，读取项目根目录下a.txt文件
        }catch (FileNotFoundException ex){//这里捕获可以预计到的异常
            //处理异常，恢复程序
            ex.printStackTrace();//打印异常完整信息（让开发人员可以根据异常信息解决bug）
            System.out.println("文件找不到");
        }catch (Exception ex){//兜底异常，如果上面获取没有触发，那么程序出问题就会来到这里
            ex.printStackTrace();
            System.out.println("系统繁忙，请稍后再试。。");
        }
        //由于上面恢复了程序，所以这里的代码可以运行到
        System.out.println("hello world");
    }

    //使用方案2：抛出异常,main方法不处理异常，抛出给调用main方法的外层方法
    public static void main2(String[] args) throws FileNotFoundException,Exception {
        //异常不处理会终止程序
        // if(true){
        //     int a = 10 / 0;//发生异常，就会终止程序
        // }
        // System.out.println("hello");//这句话运行不到

        //文件输入流读取文件
        FileInputStream fileInputStream = new FileInputStream("a.txt");//这是一个相对路径读取文件，读取项目根目录下a.txt文件
    }
}